package serie03.cmd;

import serie03.Text;

public class InsertLine extends AbstractCommand {
	
	// ATTRIBUTS
	
	/**
	 * Le numéro de ligne à mémoriser.
	 */
	private final int numLine;
	/**
	 * La ligne complète à mémoriser.
	 */
	private final String line;
	
	// CONSTRUCTEURS
	
	/**
	 * Une commande d'insertion d'une ligne.
	 * @pre <pre>
	 *     text != null </pre>
	 * @post <pre>
	 *     getText() == text
	 *     On mémorise le numéro de ligne ainsi que son contenu. </pre>    
	 */
	public InsertLine(int numLine, String s, Text text) {
		super(text);
		
		this.numLine = numLine;
		line = s;
	}
	
	// COMMANDES
	
	/**
	 * Insert la ligne de numero <code>numLine</code>.
	 * @post 
	 *     getText().getLinesNb() == old getText().getLinesNb() + 1
     *     getText().getLine(numLine).equals(s)
     *     forall i:[numLine + 1 .. getText().getLinesNb()] :
     *         getText().getLine(i).equals(old getText().getLine(i - 1))
	 */
	void doIt() {
		getText().insertLine(numLine, line);
	}
	
	/**
	 * Supprime la ligne <code>numLine</code>.
	 * @post 
	 *     getText().getLinesNb() == old getText().getLinesNb() - 1
     *     forall i:[numLine .. getText().getLinesNb()] :
     *         getText().getLine(i).equals(old getText().getLine(i + 1))
	 */
	void undoIt() {
		getText().deleteLine(numLine);
	}

}
